package com.mycode.singleton01;

/**
 * Initialization on Demand Holder: 初始化的需求
 * 静态单例对象没有作为 InnerClassSingleton 的成员变量直接实例化，因此类加载时不会实例化 InnerClassSingleton
 * 第一次调用 getInstance() 时将加载内部类 HolderClass，此时才会首先初始化这个成员变量，由 JVM 来保证其线程安全性
 */
public class InnerClassSingleton {

    private InnerClassSingleton() {
        System.out.println("InnerClassSingleton 初始化");
    }

    // 静态内部类
    private static class HolderClass {
        private final static InnerClassSingleton instance = new InnerClassSingleton();
        public HolderClass() {
            System.out.println("HolderClass 初始化");
        }
    }

    public static InnerClassSingleton getInstance() {
        return HolderClass.instance;
    }
}
